CREATE OR REPLACE FUNCTION aprovechar_promo() RETURNS TRIGGER AS '
    DECLARE
        promo RECORD;
    BEGIN
        FOR promo IN SELECT * 
                        FROM producto_promocion
                            NATURAL JOIN cliente_promocion
                            NATURAL JOIN promocion
                        WHERE codigo = new.codigo AND nro_documento = new.nro_documento
        LOOP
            EXIT WHEN NOT FOUND;
            IF new.fecha_compra >= promo.fecha_inicio
                AND new.fecha_compra <= promo.fecha_termino
            THEN
                UPDATE cliente_promocion SET usada = TRUE
                    WHERE nro_documento = new.nro_documento
                    AND id_promo = promo.id_promo;
            END IF;
        END LOOP;
    RETURN NULL;
    END;
' LANGUAGE 'plpgsql';


CREATE TRIGGER aprovechar_promo_trigger
    AFTER INSERT OR UPDATE ON cliente_producto
    FOR EACH ROW EXECUTE PROCEDURE aprovechar_promo();

# 2do procedimiento almacenado

CREATE OR REPLACE FUNCTION pago_inscripcion() RETURNS TRIGGER AS '
    DECLARE
        tiempo timestamp without time zone;
        inscripcion integer;
    BEGIN
        
        SELECT cuota FROM evento as e WHERE e.evento_nombre=new.evento_nombre AND e.evento_fecha=e.evento_fecha INTO inscripcion; 
        
        BEGIN 
            PERFORM * FROM producto 
            WHERE codigo = new.evento_nombre;
            IF NOT FOUND THEN
                INSERT INTO producto VALUES (new.evento_nombre,''Inscripcion'',''Inscripcion'',''Inscripcion'',inscripcion ,"97583233-4");
            END IF;
        END;
        
        SELECT INTO tiempo CURRENT_TIMESTAMP;
        INSERT INTO cliente_producto VALUES (new.nro_documento,new.evento_nombre,1,tiempo,DEFAULT);
            
    RETURN NULL;    
    END;
    
' LANGUAGE 'plpgsql';
DROP TRIGGER pago_inscripcion_trigger ON cliente_evento;

CREATE TRIGGER pago_inscripcion_trigger
    AFTER UPDATE OF pagado ON cliente_evento
    FOR EACH ROW EXECUTE PROCEDURE pago_inscripcion();

